1일 1알고리즘 2022/04/19) 10. 순열 구하기 [재귀함수와 완전탐색(DFS:깊이우선탐색)] <순열 구하기> : 10이하의 N개의 자연수가 주어지면 이 중 M개를 뽑아 일렬로 나열하는 방법을 모두 출력한다. 첫 번째 줄에 자연수 N과 M이 주어진다. 두 번째 줄에 N개의 자연수가 오름차순으로 주어진다. 순서 : DFS(0)의 for문 <i=0일때>! DFS(1)이 호출되므로 DFS(1)의 for문 : i = 0~2 돌리기. DFS(1)의 for문이 다 돌면 pop되므로, DFS(0)... 1일 1알고리즘1일 1알고리즘 2022/04/05) 7. 최대점수 구하기 [재귀함수와 완전탐색(DFS:깊이우선탐색)] <최대점수 구하기> : 현수는 선생님이 주신 N개의 문제를 풀려고 한다. 각 문제는 그것을 풀었을 때 얻는 점수와 푸는데 걸리는 시간이 주어지게 된다. 제한시간 M안에 N개의 문제 중 최대점수를 얻을 수 있도록 해야 한다. 제한시간 안에 얻을 수 있는 최대 점수를 출력한다. 이거도 마찬가지로, O 혹은 X 해주면 된다. 이 문제를 풀 것인지 말 것인지! 제한 시간을 넘으면 안되므로 제한 시간... 1일 1알고리즘1일 1알고리즘 2022/04/06) 8. 중복순열 [재귀함수와 완전탐색(DFS:깊이우선탐색)] <중복순열> : 1부터 N까지 번호가 적힌 구슬이 있다. 이 중 중복을 허락하여 M번을 뽑아 일렬로 나열하는 방법을 모두 출력한다. 우선 중복순열이므로, 중복도 가능하고(=같은 구슬 뽑을 수 있음) 1-2랑 2-1도 가능하다는 걸 알고 있자. 그러므로 경우의 수는 n^2이다. 3개의 구슬을 2개씩 뽑아야 한다면, 구슬1을 뽑았을 때(인덱스 0에 1) : 1,2,3 가능(인덱스 1에 1,2,3... 1일 1알고리즘1일 1알고리즘 2022/03/31) 5. 합이 같은 부분집합 [재귀함수와 완전탐색(DFS:깊이우선탐색)] <합이 같은 부분집합> : N개의 원소로 구성된 자연수 집합이 주어지면, 이 집합을 두개의 부분집합으로 나누었을 때 두 부분집합의 원소와 합이 서로 같은 경우가 존재하면 "YES"를 출력하고, 그렇지 않으면 "NO"를 출력하는 프로그램을 작성한다. 둘로 나뉘는 두 부분집합은 서로소 집합(Disjoint Set)이며, 두 부분집합을 합하면 입력으로 주어진 원래의 집합이 되어야 한다. 예를 들어... 1일 1알고리즘1일 1알고리즘 2021/12/12) 5. 최솟값 구하기 <최솟값 구하기> : 7개의 수가 주어지면 그 숫자 중 가장 작은 수를 출력하는 프로그램을 작성한다. 변수(min)를 하나 더 생성하여, 배열의 첫 번째 인자(arr[0]) 혹은 가장 큰 정수(Number.MAX_SAFE_INTEGER)로 초기화를 해준다. for문(배열 인덱스번호를 증가시키기 위해 필요)과 if문(최솟값을 비교하기 위해 필요)을 중첩하여 조건문을 만든다. ! 플러스 개념 -... 1일 1알고리즘1일 1알고리즘 2021/12/29) 5. 등수구하기 [1,2차원 탐색] <등수구하기> : N명의학생의 국어점수가 입력되면 각 학생의 등수를 입력된 순서대로 출력하는 프로그램을 작성한다. 같은 점수가 입력될 경우 높은 등수로 동일 처리한다. 즉, 가장 높은 점수가 92점인데 92점이 3명 존재하면 1등이 3명이고 그 다음 학생은 4등이 된다. Array.from해서 배열을 초기화 해준다. 두 개의 for문을 돌리는데, 만약 i인덱스의 값보다 j인덱스의 값이 더 크... 1일 1알고리즘1일 1알고리즘 2021/12/29) 6. 격자판 최대합 [1,2차원 탐색] <격자판 최대합> : N*N의 격자판이 주어지면 각 행의 합, 각 열의 합, 두 대각선의 합 중 가장 큰 합을 출력한다. 변수 answer과 sum1과 sum2를 선언한다. 그리고 변수 n을 선언하여 배열의 길이로 초기화한다. 행이 0일 때, 열을 0,1,2,3,4 이동 반복. 그리고 sum1에 값 누적 열이 0일 때, 행을 0,1,2,3,4 이동 반복. 그리고 sum2에 값 누적. 그렇게 ... 1일 1알고리즘1일 1알고리즘 2022/01/03) 7. 봉우리 [1,2차원 탐색] <봉우리> : 각 격자에는 그 지역의 높이가 쓰여있다. 각 격자판의 숫자 중 자신의 상하좌우 숫자보다 큰 숫자는 봉우리 지역이다. 봉우리 지역이 몇 개 있는 지 알아내는 프로그램을 작성한다. 격자의 가장자리는 0으로 초기화 되었다고 가정한다. 위와 같은 값이 주어진다면, 봉우리는 10개다. 현재의 위치를 기준으로, 상하좌우를 비교해야 하는 게 핵심이다. arr[i][j]를 기준으로, arr[... 1일 1알고리즘1일 1알고리즘 2022/03/21) 8. 회의실 배정 [정렬과 그리디, 결정알고리즘] <회의실 배정> : 한 개의 회의실이 있는데 이를 사용하고자 하는 n개의 회의들에 대하여 회의실 사용표를 만들려고 한다. 각 회의에 대해 시작시간과 끝나는 시간이 주어져 있고, 각 회의가 겹치지 않게 하면서 회의실을 사용할 수 있는 최대수의 회의를 찾아라. 단, 회의는 한 번 시작하면 중간에 중단될 수 없으며 한 회의가 끝나는 것과 동시에 다음 회의가 시작될 수 있다. 이 문제는 끝나는 시간... 1일 1알고리즘1일 1알고리즘 2022/03/21) 9. 결혼식 [정렬과 그리디, 결정알고리즘] <결혼식> : 결혼식 피로연을 3일간 쉬지 않고 하려고 하는데, 참석하는 친구들(N명)의 참석하는 시간정보를 미리 요구했다. 이 정보를 바탕으로 피로연 장소에 동시에 존재하는 최대 인원수를 구하여 그 인원을 수용할 수 있는 장소를 빌리려고 한다. 피로연장에 동시에 존재하는 최대 인원을 출력하라. 타임라인으로 그림을 그려본 후, 도착하는 시간을 's'로 떠나는 시간을 'e'로 해서 새 배열(T... 1일 1알고리즘1일 1알고리즘 2021/12/13) 7. 10부제 <10부제> : 자동차 10부제는 자동차 번호의 일의 자리 숫자와 날짜의 일의 자리 숫자가 일치하면 해당 자동차의 운행을 금지하는 것이다. 예를 들어, 자동차 번호의 일의 자리 숫자가 7이면 7일, 17일, 27일에 운행하지 못한다. 날짜의 일의 자리 숫자와 7대의 자동차 번호의 끝 두 자리 수가 주어졌을 때 위반하는 자동차의 대수를 출력하는 프로그램을 작성한다. for...of 문으로 자동... 1일 1알고리즘1일 1알고리즘
2022/04/19) 10. 순열 구하기 [재귀함수와 완전탐색(DFS:깊이우선탐색)] <순열 구하기> : 10이하의 N개의 자연수가 주어지면 이 중 M개를 뽑아 일렬로 나열하는 방법을 모두 출력한다. 첫 번째 줄에 자연수 N과 M이 주어진다. 두 번째 줄에 N개의 자연수가 오름차순으로 주어진다. 순서 : DFS(0)의 for문 <i=0일때>! DFS(1)이 호출되므로 DFS(1)의 for문 : i = 0~2 돌리기. DFS(1)의 for문이 다 돌면 pop되므로, DFS(0)... 1일 1알고리즘1일 1알고리즘 2022/04/05) 7. 최대점수 구하기 [재귀함수와 완전탐색(DFS:깊이우선탐색)] <최대점수 구하기> : 현수는 선생님이 주신 N개의 문제를 풀려고 한다. 각 문제는 그것을 풀었을 때 얻는 점수와 푸는데 걸리는 시간이 주어지게 된다. 제한시간 M안에 N개의 문제 중 최대점수를 얻을 수 있도록 해야 한다. 제한시간 안에 얻을 수 있는 최대 점수를 출력한다. 이거도 마찬가지로, O 혹은 X 해주면 된다. 이 문제를 풀 것인지 말 것인지! 제한 시간을 넘으면 안되므로 제한 시간... 1일 1알고리즘1일 1알고리즘 2022/04/06) 8. 중복순열 [재귀함수와 완전탐색(DFS:깊이우선탐색)] <중복순열> : 1부터 N까지 번호가 적힌 구슬이 있다. 이 중 중복을 허락하여 M번을 뽑아 일렬로 나열하는 방법을 모두 출력한다. 우선 중복순열이므로, 중복도 가능하고(=같은 구슬 뽑을 수 있음) 1-2랑 2-1도 가능하다는 걸 알고 있자. 그러므로 경우의 수는 n^2이다. 3개의 구슬을 2개씩 뽑아야 한다면, 구슬1을 뽑았을 때(인덱스 0에 1) : 1,2,3 가능(인덱스 1에 1,2,3... 1일 1알고리즘1일 1알고리즘 2022/03/31) 5. 합이 같은 부분집합 [재귀함수와 완전탐색(DFS:깊이우선탐색)] <합이 같은 부분집합> : N개의 원소로 구성된 자연수 집합이 주어지면, 이 집합을 두개의 부분집합으로 나누었을 때 두 부분집합의 원소와 합이 서로 같은 경우가 존재하면 "YES"를 출력하고, 그렇지 않으면 "NO"를 출력하는 프로그램을 작성한다. 둘로 나뉘는 두 부분집합은 서로소 집합(Disjoint Set)이며, 두 부분집합을 합하면 입력으로 주어진 원래의 집합이 되어야 한다. 예를 들어... 1일 1알고리즘1일 1알고리즘 2021/12/12) 5. 최솟값 구하기 <최솟값 구하기> : 7개의 수가 주어지면 그 숫자 중 가장 작은 수를 출력하는 프로그램을 작성한다. 변수(min)를 하나 더 생성하여, 배열의 첫 번째 인자(arr[0]) 혹은 가장 큰 정수(Number.MAX_SAFE_INTEGER)로 초기화를 해준다. for문(배열 인덱스번호를 증가시키기 위해 필요)과 if문(최솟값을 비교하기 위해 필요)을 중첩하여 조건문을 만든다. ! 플러스 개념 -... 1일 1알고리즘1일 1알고리즘 2021/12/29) 5. 등수구하기 [1,2차원 탐색] <등수구하기> : N명의학생의 국어점수가 입력되면 각 학생의 등수를 입력된 순서대로 출력하는 프로그램을 작성한다. 같은 점수가 입력될 경우 높은 등수로 동일 처리한다. 즉, 가장 높은 점수가 92점인데 92점이 3명 존재하면 1등이 3명이고 그 다음 학생은 4등이 된다. Array.from해서 배열을 초기화 해준다. 두 개의 for문을 돌리는데, 만약 i인덱스의 값보다 j인덱스의 값이 더 크... 1일 1알고리즘1일 1알고리즘 2021/12/29) 6. 격자판 최대합 [1,2차원 탐색] <격자판 최대합> : N*N의 격자판이 주어지면 각 행의 합, 각 열의 합, 두 대각선의 합 중 가장 큰 합을 출력한다. 변수 answer과 sum1과 sum2를 선언한다. 그리고 변수 n을 선언하여 배열의 길이로 초기화한다. 행이 0일 때, 열을 0,1,2,3,4 이동 반복. 그리고 sum1에 값 누적 열이 0일 때, 행을 0,1,2,3,4 이동 반복. 그리고 sum2에 값 누적. 그렇게 ... 1일 1알고리즘1일 1알고리즘 2022/01/03) 7. 봉우리 [1,2차원 탐색] <봉우리> : 각 격자에는 그 지역의 높이가 쓰여있다. 각 격자판의 숫자 중 자신의 상하좌우 숫자보다 큰 숫자는 봉우리 지역이다. 봉우리 지역이 몇 개 있는 지 알아내는 프로그램을 작성한다. 격자의 가장자리는 0으로 초기화 되었다고 가정한다. 위와 같은 값이 주어진다면, 봉우리는 10개다. 현재의 위치를 기준으로, 상하좌우를 비교해야 하는 게 핵심이다. arr[i][j]를 기준으로, arr[... 1일 1알고리즘1일 1알고리즘 2022/03/21) 8. 회의실 배정 [정렬과 그리디, 결정알고리즘] <회의실 배정> : 한 개의 회의실이 있는데 이를 사용하고자 하는 n개의 회의들에 대하여 회의실 사용표를 만들려고 한다. 각 회의에 대해 시작시간과 끝나는 시간이 주어져 있고, 각 회의가 겹치지 않게 하면서 회의실을 사용할 수 있는 최대수의 회의를 찾아라. 단, 회의는 한 번 시작하면 중간에 중단될 수 없으며 한 회의가 끝나는 것과 동시에 다음 회의가 시작될 수 있다. 이 문제는 끝나는 시간... 1일 1알고리즘1일 1알고리즘 2022/03/21) 9. 결혼식 [정렬과 그리디, 결정알고리즘] <결혼식> : 결혼식 피로연을 3일간 쉬지 않고 하려고 하는데, 참석하는 친구들(N명)의 참석하는 시간정보를 미리 요구했다. 이 정보를 바탕으로 피로연 장소에 동시에 존재하는 최대 인원수를 구하여 그 인원을 수용할 수 있는 장소를 빌리려고 한다. 피로연장에 동시에 존재하는 최대 인원을 출력하라. 타임라인으로 그림을 그려본 후, 도착하는 시간을 's'로 떠나는 시간을 'e'로 해서 새 배열(T... 1일 1알고리즘1일 1알고리즘 2021/12/13) 7. 10부제 <10부제> : 자동차 10부제는 자동차 번호의 일의 자리 숫자와 날짜의 일의 자리 숫자가 일치하면 해당 자동차의 운행을 금지하는 것이다. 예를 들어, 자동차 번호의 일의 자리 숫자가 7이면 7일, 17일, 27일에 운행하지 못한다. 날짜의 일의 자리 숫자와 7대의 자동차 번호의 끝 두 자리 수가 주어졌을 때 위반하는 자동차의 대수를 출력하는 프로그램을 작성한다. for...of 문으로 자동... 1일 1알고리즘1일 1알고리즘